const urlParams = new URLSearchParams(window.location.search);
const patientUrl = window.config.backendapiUrl+'/fetchpatient';
const statusUrl = window.config.backendapiUrl+'/refreshstatus';
let id

function exportDataToJSON() {
    const jsonData = JSON.stringify(patientData);
    const blob = new Blob([jsonData], { type: 'application/json' });

    // 创建一个 URL 来指向这个 Blob
    const url = URL.createObjectURL(blob);

    // 创建一个 <a> 元素，用来触发下载
    const a = document.createElement('a');
    a.href = url;
    a.download = 'data.json';  // 设置下载的文件名
    document.body.appendChild(a); // 将元素添加到文档中
    a.click();  // 触发点击事件，下载文件

    // 下载完成后，清理 URL 对象
    URL.revokeObjectURL(url);
    document.body.removeChild(a); // 从文档中移除 <a> 元素
}


function getPatientInfoById(patientData, patientId) {
    const patient = patientData[patientId];  // 获取对应 id 的病历数据

    if (!patient) {
        return `未找到该患者数据: ${patientId}`;
    }

    let hintStr = '';
    let contentStr = '';
    let originStr = '';

    // 遍历 patient 中的各个字段（排除掉 "status" 和 "input"）
    for (let key in patient) {
        if (key === "status" || key === "input") continue;  // 排除 "status" 和 "input"

        const { hint, content, origin } = patient[key];  // 解构出 hint、content 和 origin 字段

        // 拼接每个字段的内容到相应的字符串
        hintStr += `${key}: ${hint}\n`;
        contentStr += `${key}: ${content}\n`;
        originStr += `${key}: ${origin}\n`;
    }

    // 返回拼接后的三个字符串
    return { hintStr, contentStr, originStr };
}
async function postStatus(statusUrl, id, status) {
    const data = {
        id: id,
        status: status
    };
    const response = await fetch(statusUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({ text: data })
    });
    // 如果响应状态不是 2xx（OK），抛出异常
    if (!response.ok) {
        throw new Error(`Server responded with status: ${response.status}`);
    }
    // 解析返回的 JSON 数据
    return await response.json();
}

async function getData(patienturl) {
    try {
        // 使用 fetch 发送 POST 请求
        const response = await fetch(patienturl, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json'
            }
        });
        // 如果响应状态不是 2xx（OK），抛出异常
        if (!response.ok) {
            throw new Error(`Server responded with status: ${response.status}`);
        }
        // 解析返回的 JSON 数据
        return await response.json();

    } catch (error) {
        // 捕获并处理异常
        console.error('Request failed:', error);
        throw error; // 重新抛出错误以便上层处理
    }
};
// 统计数据
function getDataStats() {
    const stats = {
        init: 0,
        approved: 0,
        rejected: 0
    };
    console.log(patientData)
    for (let key in patientData) {
        let value = patientData[key]; // 获取当前键的值
        if (value.status === 'init') {
            stats.init++;
        } else if (value.status === 'approved') {
            stats.approved++;
        } else {
            stats.rejected++;
        }
    }
    return stats;
}

// 更新饼图
function updatePieChart(stats) {
    const ctx = document.getElementById('pieChart').getContext('2d');
    const pieChart = new Chart(ctx, {
        type: 'pie',
        data: {
            labels: ['未标注', '保留', '弃用'],
            datasets: [{
                label: '占比',
                data: [stats.init, stats.approved, stats.rejected],
                backgroundColor: ['#95a5a6', '#2ecc71', '#e74c3c'], // 优化的配色
                borderColor: ['#fff', '#fff', '#fff'],
                borderWidth: 1
            }]
        },
        options: {
            responsive: true,
            plugins: {
                legend: {
                    position: 'top',
                },
                tooltip: {
                    enabled: true
                }
            }
        }
    });
}

function updateDataGrid() {

    // 获取容器元素
    const container = document.getElementById('dataGrid');
    const statusColors = {
        unlabeled: 'gray',   // 未标记的状态
        approved: 'green',   // 批准的状态
        rejected: 'red',     // 拒绝的状态
    };
    // 动态生成小块
    for (let key in patientData) {
        let value = patientData[key]; // 获取当前键的值
        const block = document.createElement('div');
        block.classList.add('data-cell');
        block.id = key;
        block.setAttribute('data-status', value.status); // 设置状态数据属性
        const blockColor = statusColors[value.status] || 'gray'; // 默认颜色为灰色
        block.style.backgroundColor = blockColor;
        container.appendChild(block);
    }
}

function bindclick() {
    const elements = document.querySelectorAll('.data-cell');
    document.getElementById('downArrowButton').addEventListener('click', exportDataToJSON);
    // 为每个元素绑定点击事件
    elements.forEach(element => {
        element.addEventListener('click', function () {
            let getPatientInfoByIdResult = getPatientInfoById(patientData, element.id);
            debugger;
            // 触发事件时的回调
            document.getElementById('question').innerText = patientData[element.id].input;
            document.getElementById('answerLeft').innerText = getPatientInfoByIdResult.originStr;
            document.getElementById('answerRight').innerText = getPatientInfoByIdResult.contentStr;
            id = element.id;
        });
    });
    if (id) {
        document.getElementById(id).click();
    } else if (elements.length > 0) {
        elements[0].click();
    }
}
async function refresh() {
    patientData = await getData(patientUrl);
    const stats = getDataStats();
    updatePieChart(stats);
    updateDataGrid();
    bindclick();
}

// 点击弃用按钮
document.getElementById('rejectBtn').addEventListener('click', async () => {
    // 更新最后一个数据为弃用
    await postStatus(statusUrl, id, 'rejected');
    location.reload();
    await refresh();
});

// 点击保留按钮
document.getElementById('approveBtn').addEventListener('click', async () => {
    // 更新最后一个数据为保留
    await postStatus(statusUrl, id, 'approved');
    location.reload();
    await refresh();

});

let patientData
// 初始化图表和数据
refresh();